#!/bin/bash

# Actualizacion de la lista Maestra
# Grupo 5 Tema C
#ultima version

#funcion para logear#
function log() {
        command=$1
        message=$2 
        type=$3
       if [ $# -ge 2 ] && [ $# -le 3 ] 
      then
			./Logging.sh "$command" "$message" "$type" 
       fi
}

#DIRECTORIOS#
#MAEDIR=MAEDIR
PRECIOS=$MAEDIR/precios
PROCESADOS=$MAEDIR/precios/proc 
#RECHDIR=$MAEDIR/precios/RECHDIR 

#CONTADORES#
regOk=0
regNok=0
regSup=0
contadorReg=0
regOklocales=0
regEliminadosGlobales=0

#CUENTO LA CANTIDAD DE ARCHIVOS A PROCESAR#
archivos=$(ls -1p $PRECIOS | grep -v /\$ | egrep "[^~]$" )
viejoIFS=$IFS 			#guardo el IFS actual
IFS=$'\n' 				#pongo como IFS sólo el new line
vector=($archivos) 		#creo el vector separando sólo con el IFS
IFS=$viejoIFS 			#restauro el IFS anterior
cantidad=${#vector[@]}  #guardo la cantidad de archivos a procesar

#loggeando el comienzo del script#
lineaLog="Inicio de Masterlist"
log "Masterlist.sh" "$lineaLog" "I"

lineaLog="Cantidad de Listas de precios a procesar: $cantidad"
log "Masterlist.sh" "$lineaLog" "I"




#COMIENZO DEL PROCESO#

for archivo in ${vector[@]}
do
  	#COMPRUEBO SI FUE YA PROCESADO
 	if [ -f $PROCESADOS/$archivo ]; then
		#mueve y loggea el archivo procesado#
		./Mover.sh $PRECIOS/$archivo $RECHDIR  
		lineaLog="Archivo ya procesado: $archivo"
		log "Masterlist.sh" "$lineaLog" "I"
	else 
		#loggea el nombre del archivo a procesar#
		lineaLog="Archivo a procesar: $archivo"		
		log "Masterlist.sh"	"$lineaLog" "I"

		cabecera=$(head -1 $PRECIOS/$archivo | tail -1) #obtiene la primera linea del archivo
		NOMBRE_SUPER=$(echo "$cabecera" | cut -f1 -d";") #lee el campo 1 de la primera linea 
		PROVINCIA=$(echo "$cabecera" | cut -f2 -d";")
		CANT_CAMPOS=$(echo "$cabecera" | cut -f3 -d";")
		CAMPO_PROD=$(echo "$cabecera" | cut -f4 -d";")
		CAMPO_PRECIO=$(echo "$cabecera" | cut -f5 -d";")
		EMAIL=$(echo "$cabecera" | cut -f6 -d";")

		linea=$(grep ";$PROVINCIA;$NOMBRE_SUPER;" $MAEDIR/super.mae) #obtengo la linea que contiene al 	
		if [ -z "$linea" ];then 					     #supermercado y la provincia
		  lineaLog=" Se rechaza el archivo por Supermercado inexistente"
		  log "Masterlist.sh"	"$lineaLog" "I"
		  ./Mover.sh $PRECIOS/$archivo $RECHDIR  
		  continue
		fi									
		super_id=$(echo "$linea" | cut -f1 -d";")				   #obtengo el super_id	
		id=$(grep "^$super_id;$PROVINCIA;$NOMBRE_SUPER;" $MAEDIR/super.mae)
		#CHEQUEO DE CABECERA #		
		if [ -z "$id" ];then
		      #loggea supermercado inexistente y mueve a rechazados#
		      lineaLog=" Se rechaza el archivo por Supermercado ID inexistente"
		      log "Masterlist.sh"	"$lineaLog" "I"
		      ./Mover.sh $PRECIOS/$archivo $RECHDIR  
		      continue
		fi
		
		
#		declare -i numero	#declara como entero la variable numero
#		numero=$CANT_CAMPOS
		numero=$(echo $CANT_CAMPOS | grep '^[0-9]*$')
		if [ -z "$numero" ];then
			#loggea cantidad de campos invalida y mueve a rechazados#
			lineaLog=" Se rechaza el archivo por Cantidad de campos invalida"
			log "Masterlist.sh"	"$lineaLog" "I"
			./Mover.sh $PRECIOS/$archivo $RECHDIR  
			continue
		fi
		
		if [ $numero -lt 2 ];then
		
			#loggea cantidad de campos invalida y mueve a rechazados#
			lineaLog=" Se rechaza el archivo por Cantidad de campos invalida"
			log "Masterlist.sh"	"$lineaLog" "I"
			./Mover.sh $PRECIOS/$archivo $RECHDIR  
			continue
		
		fi
		
#		numero=$CAMPO_PROD
		numero=$(echo $CAMPO_PROD | grep '^[0-9]*$')
		if [ -z "$numero" ] ;then
			#loggea campo ubicacion del producto invalido y mueve a rechazados#
			lineaLog=" Se rechaza el archivo por Posicion producto invalida"
			log "Masterlist.sh"	"$lineaLog" "I"
			./Mover.sh $PRECIOS/$archivo $RECHDIR  
			continue	
		fi
		
		if [ $numero -lt 0 ] || [ $numero -gt $CANT_CAMPOS ];then
		
			#loggea campo ubicacion del producto invalido y mueve a rechazados#
			lineaLog=" Se rechaza el archivo por Posicion producto invalida"
			log "Masterlist.sh"	"$lineaLog" "I"
			./Mover.sh $PRECIOS/$archivo $RECHDIR  
			continue	
		
		fi
		
		numero=$CAMPO_PRECIO
		numero=$(echo $CAMPO_PRECIO | grep '^[0-9]*$')
		if [ -z "$numero" ] ;then
			#loggea campo precio del producto invalido y mueve a rechazados#
			lineaLog=" Se rechaza el archivo por Posicion precio invalida"
			log "Masterlist.sh"	"$lineaLog" "I"
			./Mover.sh $PRECIOS/$archivo $RECHDIR  
			continue
		fi
		
		if [ $numero -lt 0 ] || [ $numero -gt $CANT_CAMPOS ] || [ $numero -eq $CAMPO_PROD ];then
			#loggea campo precio del producto invalido y mueve a rechazados#
			lineaLog=" Se rechaza el archivo por Posicion precio invalida"
			log "Masterlist.sh"	"$lineaLog" "I"
			./Mover.sh $PRECIOS/$archivo $RECHDIR  
			continue
		
		fi
		
		#OBTENGO EL USUARIO DEL NOMBRE DEL ARCHIVO#
		usuario=$(echo "$archivo" | cut -f2 -d".")
		linea=$(grep ";$usuario;.;$EMAIL" $MAEDIR/asociados.mae)
		#compruebo que no sea null
		if [ -z "$linea" ];then
			#loggea correo electronico invalido y mueve a rechazados#
			lineaLog=" Se rechaza el archivo por Correo electronico del colaborador invalido"
			log "Masterlist.sh"	"$lineaLog" "I"
			./Mover.sh $PRECIOS/$archivo $RECHDIR  
			continue
		fi
		
		#obtengo la fecha y la parseo en dia mes anio#
		campoAux=$(echo "$archivo" | cut -f1 -d".")
		fecha=$(echo "$campoAux" | cut -f2 -d"-")
		 date -d "$fecha" "+%m/%d/%Y" > /dev/null 2>&1
		 valid=$?
		if [ $valid -eq 1 ];then
			lineaLog=" Se rechaza el archivo por fecha invalida del nombre del archivo"
			log "Masterlist.sh"	"$lineaLog" "I"
			./Mover.sh $PRECIOS/$archivo $RECHDIR  
			continue
		fi
		
		dia=$(echo $fecha | cut -c 7,8)
		mes=$(echo $fecha | cut -c 5,6)
		anio=$(echo $fecha | cut -c 1-4)
		
					

		#chequeando si existe una lista de precios 
			rechazado=0
			reemplazo=0
		if [ -f $MAEDIR/precios.mae ];then

			#compruebo si existe un registro con el mismo super_id y el usuario
			registro=$(grep "$super_id;$usuario" $MAEDIR/precios.mae)
			rechazado=0
			reemplazo=0
			#si el registro esta vacio, cargo
			if [ -z "$registro" ];then 
				
				let rechazado=0
				let reemplazo=0
				
			else
					
						#COMPROBACION DE FECHAS#
						reemplazo=0
						while read lines
						do
							let reemplazo=0
							
							
							fechaOld=$(echo "$lines" | cut -f3 -d";")
							super_idOld=$(echo "$lines" | cut -f1 -d";")
							colaborador=$(echo "$lines" | cut -f2 -d";")
								
							
							date -d "$fechaOld" "+%m/%d/%Y" > /dev/null 2>&1
							valid=$?
					#		 echo "$valid"
							if [ $valid -eq 1 ];then
							#	grabarReg=0
								continue
							fi
							
							diaOld=$(echo $fechaOld | cut -c 7,8)
							mesOld=$(echo $fechaOld | cut -c 5,6)
							anioOld=$(echo $fechaOld | cut -c 1-4)
							
						
				#comprueba si la fecha es anterior es mas reciente que la nueva#						
							
							if [ $super_id -eq $super_idOld ] && [ $usuario == $colaborador ];then
														
								if [ $anioOld -lt $anio ];then
									let reemplazo=1
									 
									
								else 	
									if [ $reemplazo -eq 0 ] && [ $mesOld -lt $mes ] && [ $anioOld -eq $anio ];then
										let reemplazo=1
										
									else
										if [ $reemplazo -eq 0 ] && [ $diaOld -lt $dia ] && [ $mesOld -eq $mes ] && [ $anioOld -eq $anio ];then
											let reemplazo=1	
																			
										fi
									fi
								fi

								if [ $reemplazo -eq 1 ];then
									#guarda un registro auxiliar para procesar el reemplazo#
									aux=$super_id";"$usuario";"$fechaOld

									break
									
									

								else
									let rechazado=1
									break	
								fi
							fi	

						done <$MAEDIR/precios.mae
					

			fi
		fi
				let regEliminados=0
				if [ $reemplazo -eq 1 ] && [ $rechazado -eq 0 ];then
						  #borramos los repetidos
					  sed "/$aux/ d" <$MAEDIR/precios.mae>$MAEDIR/aux.txt
					  lineasPmae=$(cat $MAEDIR/precios.mae | wc -l)
					  lineasFinal=$(cat $MAEDIR/aux.txt | wc -l)
					  let regEliminados=lineasPmae-lineasFinal
					  let regEliminadosGlobales=regEliminadosGlobales+regEliminados
					  
					  rm $MAEDIR/precios.mae
					  mv $MAEDIR/aux.txt $MAEDIR/precios.mae
							
				fi
				
				if [ $rechazado -eq 0 ];then		
					readed=0
					let regOklocales=0

					while read linea2 
					do
						let readed=readed+1 
						if [ $readed -eq 1 ];then
							#salteo el registro cabecera#
							continue
						fi

						let grabarReg=1 #variable que decide si se graba o no un registro

						#comprobacion del numero de columnas del registro
						numeroDeColumnas=`echo $linea2 | awk 'BEGIN{FS=";"};{print NF}'`
						if [ $numeroDeColumnas -ne $CANT_CAMPOS ];then
							let grabarReg=0 #si grabarReg=0 no se graba
				
						fi

						#obtengo la descripcion del producto# 
						descripcion=$(echo "$linea2" | cut -f"$CAMPO_PROD" -d";")
						if [ -z "$descripcion" ];then
							let grabarReg=0 #si grabarReg=0 no se graba							

						fi

						#obtengo el precio del producto# 
						precio=$(echo "$linea2" | cut -f"$CAMPO_PRECIO" -d";")
						#compruebo que el campo precio no sea vacio
						if [ -z "$precio" ];then
							let grabarReg=0 #si grabarReg=0 no se graba

						fi
						#valido que el precio sea numerico
						pesos=$(echo "$precio" | cut -f"1" -d".")
						centavos=$(echo "$precio" | cut -f"2" -d".")
						
						numero=$(echo $centavos | grep '^[0-9]*$')
						if [ -z "$numero" ] ;then
						    let grabarReg=0
						fi
						
						numero=$(echo $pesos | grep '^[0-9]*$')
						if [ -z "$numero" ] ;then
						    let grabarReg=0
						fi
				

						#proceso grabado#
					

						if [ $grabarReg -eq 1 ];then
							reg=$super_id";"$usuario";"$fecha";"$descripcion";"$precio

							echo $reg >> $MAEDIR/precios.mae
							let regOk=regOk+1
							let regOklocales=regOklocales+1
						else 

							let regNok=regNok+1					

						fi

					done <$PRECIOS/$archivo
					
					
				fi
				
				if [ $rechazado -eq 1 ];then
					#loggea fecha anterior y mueve a rechazados#
					lineaLog=" Se rechaza el archivo fecha anterior existente"
					log "Masterlist.sh"	"$lineaLog" "I"
					./Mover.sh $PRECIOS/$archivo $RECHDIR
				fi
		

	fi
	./Mover.sh $PRECIOS/$archivo $PROCESADOS
done
#let regOk=regOk-regEliminadosGlobales
#logea registros eliminados,registrosOk y registros NO ok
lineaLog="Registros eliminados: $regEliminadosGlobales, Registros OK: $regOk y Registros NO OK: $regNok"
log "Masterlist.sh"	"$lineaLog" "I"

lineaLog="Fin de Masterlist"
log "Masterlist.sh"	"$lineaLog" "I"
exit 0  #salida EXITO
